package com.lzy.webapi.facade;

import com.github.pagehelper.PageInfo;
import com.lzy.framework.core.orm.db.Pager;
import com.lzy.framework.tools.commons.BigDecimalUtil;
import com.lzy.product.apis.CouponProfitRecordServiceApi;
import com.lzy.product.apis.ProductInfoProjectServiceApi;
import com.lzy.product.apis.ProductInfoServiceApi;
import com.lzy.product.apis.ProductYieldRatioServiceApi;
import com.lzy.product.constants.BusinessType;
import com.lzy.product.dtos.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by WIN7 on 2017/12/30.
 */
@Component
public class ProductCouponFacade {

    @Autowired
    ProductInfoServiceApi productInfoServiceApi;

    @Autowired
    ProductInfoProjectServiceApi productInfoProjectServiceApi;

    @Autowired
    ProductYieldRatioServiceApi yieldRatioServiceApi;

    @Autowired
    CouponProfitRecordServiceApi couponProfitRecordServiceApi;

    /**
     * 获取卡券产品列表
     */
    public PageInfo<ProductInfoDto> getProductList(Pager pager) {
        //获取卡券产品的列表
        ProductInfoDto productInfoDto = new ProductInfoDto();
        productInfoDto.setStatus(BusinessType.StatusEnum.ENABLED.getCode());
        productInfoDto.setShelves(BusinessType.ShelfEnum.PUT.getK());
        productInfoDto.setType(BusinessType.ProductType.COUPON.getCode());
        PageInfo<ProductInfoDto> pageInfo = productInfoServiceApi.selectList(pager, productInfoDto);
        if (pageInfo != null && pageInfo.getList() != null && pageInfo.getList().size() > 0) {
            List<ProductInfoDto> infoDtoList = pageInfo.getList();
            for (ProductInfoDto piDto : infoDtoList) {
                if (piDto != null) {
                    if (piDto.getId() != null) {
                        //获取卡券产品与包含项的关联信息
                        ProductInfoProjectDto productInfoProjectDto = new ProductInfoProjectDto();
                        productInfoProjectDto.setProductId(piDto.getId());
                        List<ProductInfoProjectDto> productInfoProjectDtoList = productInfoProjectServiceApi.query(productInfoProjectDto);
                        piDto.setProjectList(productInfoProjectDtoList);
                        //获取各种券的张数
                        List<ProductInfoProjectDto> proInfoProList = productInfoProjectServiceApi.findByProductId(piDto.getId());
                        if (proInfoProList != null && proInfoProList.size() > 0) {
                            List<ProductCouponDto> couponList = new ArrayList<>();
                            for (ProductInfoProjectDto pipDto : proInfoProList) {
                                if (pipDto != null) {
                                    ProductCouponDto productCouponDto = new ProductCouponDto();
                                    productCouponDto.setName(pipDto.getName());
                                    productCouponDto.setNumber(pipDto.getContainNum());
                                    productCouponDto.setUnit(pipDto.getUnit());
                                    couponList.add(productCouponDto);
                                }
                            }
                            piDto.setCouponList(couponList);
                        }
                        //获取卡券产品与返现比率的关联信息
                        List<ProductYieldRatioDto> yieldRatioDtoList = yieldRatioServiceApi.queryListByProductId(piDto.getId());
                        piDto.setYieldRatioDtoList(yieldRatioDtoList);
                    }
                }
            }
        }
        return pageInfo;
    }

    /**
     * 获取卡券产品详情
     *
     * @param id
     * @return
     */
    public ProductInfoDto getDetail(Long id) {
        //获取卡券产品信息
        ProductInfoDto productInfoDto = productInfoServiceApi.findById(id);
        if (productInfoDto != null) {
            if (productInfoDto.getId() != null) {
                //获取卡券产品与包含项的关联信息
                ProductInfoProjectDto InfoProjectDto = new ProductInfoProjectDto();
                InfoProjectDto.setProductId(productInfoDto.getId());
                List<ProductInfoProjectDto> productInfoProjectDtoList = productInfoProjectServiceApi.query(InfoProjectDto);
                productInfoDto.setProjectList(productInfoProjectDtoList);
                //获取卡券产品与返现比率的关联信息
                List<ProductYieldRatioDto> yieldRatioDtoList = yieldRatioServiceApi.queryListByProductId(productInfoDto.getId());
                productInfoDto.setYieldRatioDtoList(yieldRatioDtoList);

                //判断收益
                if (yieldRatioDtoList != null && yieldRatioDtoList.size() > 0) {
                    //如果此参数month为空，则根据第一个月数为默认
                    CouponProceedDto couponProceedDto = new CouponProceedDto();
                    couponProceedDto.setYieldRatioId(yieldRatioDtoList.get(0).getId());
                    couponProceedDto.setMonth(yieldRatioDtoList.get(0).getCashbackTime());
                    if (productInfoDto.getPrice() != null) {
                        if(yieldRatioDtoList.get(0).getCashbackRatio() == null) {
                            yieldRatioDtoList.get(0).setCashbackRatio(BigDecimal.ZERO);
                        }
                        //龙币总额 = 套餐金额 * （返现率（不包含百分单位）/100 + 1）
                        BigDecimal totalDragon = BigDecimalUtil.to2Point(BigDecimalUtil.multiply(productInfoDto.getPrice(), BigDecimalUtil.add(BigDecimalUtil.divide(yieldRatioDtoList.get(0).getCashbackRatio(), new BigDecimal("100")), BigDecimal.ONE)));
                        couponProceedDto.setTotalDragon(totalDragon);
                        BigDecimal dayTotal = couponProfitRecordServiceApi.calculateDayProfit(couponProceedDto.getTotalDragon(), couponProceedDto.getMonth());
                        if (dayTotal != null) {
                            couponProceedDto.setDayIncome(dayTotal);
                            productInfoDto.setCouponProceedDto(couponProceedDto);
                        }
                    }
                }
            }
        }
        return productInfoDto;
    }

    /**
     * 根据利率id获取附加收益
     *
     * @param yieldRatioId
     * @return
     */
    public CouponProceedDto getByYieldRatioId(Long yieldRatioId) {
        CouponProceedDto couponProceedDto = new CouponProceedDto();
        ProductYieldRatioDto yieldRatioDto = yieldRatioServiceApi.findById(yieldRatioId);
        if (yieldRatioDto != null) {
            couponProceedDto.setYieldRatioId(yieldRatioId);
            couponProceedDto.setMonth(yieldRatioDto.getCashbackTime());
            //根据productId获取卡券套餐的价格
            if (yieldRatioDto.getProductId() != null) {
                ProductInfoDto productInfoDto = productInfoServiceApi.findById(yieldRatioDto.getProductId());
                if (productInfoDto != null && productInfoDto.getPrice() != null) {
                    if (yieldRatioDto.getCashbackRatio() == null) {
                        yieldRatioDto.setCashbackRatio(BigDecimal.ZERO);
                    }
                    //龙币总额 = 套餐金额 * （返现率（不包含百分单位）/100 + 1）
                    BigDecimal totalDragon = BigDecimalUtil.to2Point(BigDecimalUtil.multiply(productInfoDto.getPrice(), BigDecimalUtil.add(BigDecimalUtil.divide(yieldRatioDto.getCashbackRatio(), new BigDecimal("100")), BigDecimal.ONE)));
                    couponProceedDto.setTotalDragon(totalDragon);
                    BigDecimal dayTotal = couponProfitRecordServiceApi.calculateDayProfit(couponProceedDto.getTotalDragon(), couponProceedDto.getMonth());
                    if (dayTotal != null) {
                        couponProceedDto.setDayIncome(dayTotal);
                        productInfoDto.setCouponProceedDto(couponProceedDto);
                    }
                }
            }
        }
        return couponProceedDto;
    }
}
